#!/bin/sh

PIM_SM_DIR=/opt/pimSM
PIM_SM_VAR_DIR=/var/pim-sm
PIMD_CONF_FILE=pimd.conf
PIMD_CONF_FILE_PATH=$PIM_SM_VAR_DIR/$PIMD_CONF_FILE

case "$1" in
  start|restart)
	. $PIM_SM_DIR/etc/settings
	if [ "$1" = "restart" ]; then
	    echo -n "Restarting module pimSM: "
	    killall pimd 2> /dev/null
	else
	    echo -n "Starting module pimSM: "
	fi
	if [ "$MOD_PIMSM_ENABLED" != "1" ]; then
	    echo "skipped"
	    exit 0
	fi

        VIF_LST=`decode "$MOD_PIMSM_VIF_LST"`
        for i in $VIF_LST; do
    	    VIF=`echo $i | grep eth`
    	    if [ -n "$VIF" ]; then
    		ifconfig $VIF allmulti
	    fi
    	    VIF=`echo $i | grep gre`
    	    if [ -n "$VIF" ]; then
    		ip link set $VIF multicast on
    		ip tunnel change $VIF ttl 64
	    fi
	    echo 0 > /proc/sys/net/ipv4/conf/$i/rp_filter
        done

        if [ "$MOD_PIMSM_VIF_DISABLED" = "1" ]; then
    	    VIF_DISABLED="-N"
    	fi

	if [ ! -d $PIM_SM_VAR_DIR ]; then
	    mkdir -p $PIM_SM_VAR_DIR
	fi
	decode "$MOD_PIMSM_PIMD" > $PIMD_CONF_FILE_PATH

        [ -e /var/run/pimd.pid ] && sleep 1
        # Pozn: Predchazejici radek s "sleep 1" byl pridan pro eliminaci
        # hlasky "Another multicast routing application is already
        # running". Pokud se tato hlaska jeste objevi, tak je treba tento radek
        # nahradit smyckou, ktera bude hlidat existenci pid souboru.

	$PIM_SM_DIR/bin/pimd $VIF_DISABLED -c $PIMD_CONF_FILE_PATH -o $MOD_PIMSM_HELLO_PERIOD -u $MOD_PIMSM_JOIN_PERIOD -b $MOD_PIMSM_BOOTSTRAP_PERIOD
	RETVAL=$?
	if [ $RETVAL = 0 ]; then echo "done"; else echo "failed"; fi
	exit $RETVAL
	;;
  stop)
	echo -n "Stopping module pimSM: "
	killall pimd 2> /dev/null
	RETVAL=$?
	if [ $RETVAL = 0 ]; then echo "done"; else echo "failed"; fi
	rm -r $PIM_SM_VAR_DIR
	exit $RETVAL
	;;
  status)
	echo -n "Module pimSM is "
	killall -USR1 pimd 2> /dev/null
	RETVAL=$?
	if [ $RETVAL = 0 ]; then echo "running"; else echo "stopped"; fi
	exit $RETVAL
	;;
  defaults)
	cp $PIM_SM_DIR/etc/defaults $PIM_SM_DIR/etc/settings 2> /dev/null
	;;
  *)
	echo "Usage: $0 {start|stop|restart|status|defaults}"
	exit 1
esac
